/*
  * Copyright 2009 Red Hat, Inc.
  *
  * Red Hat licenses this file to you under the Apache License, version 2.0
  * (the "License"); you may not use this file except in compliance with the
  * License.  You may obtain a copy of the License at:
  *
  *    http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
  * License for the specific language governing permissions and limitations
  * under the License.
  */
 package org.jboss.netty.example.securechat;
 
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.net.InetSocketAddress;
 import java.util.concurrent.Executors;
 
 import org.jboss.netty.bootstrap.ClientBootstrap;
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelFuture;
 import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
 
 /**
  * Simple SSL chat client modified from {@link TelnetClient}.
  *
  * @author <a href="http://www.jboss.org/netty/">The Netty Project</a>
  * @author <a href="http://gleamynode.net/">Trustin Lee</a>
  *
  * @version $Rev: 2080 $, $Date: 2010-01-26 18:04:19 +0900 (Tue, 26 Jan 2010) $
  *
  */
 public class SecureChatClient {
 
     public static void main(String[] args) throws Exception {
         // Configure the client.
         ClientBootstrap bootstrap = new ClientBootstrap(
                 new NioClientSocketChannelFactory(
                         Executors.newCachedThreadPool(),
                         Executors.newCachedThreadPool()));
 
         // Configure the pipeline factory.
         bootstrap.setPipelineFactory(new SecureChatClientPipelineFactory());
 
         String host = "127.0.0.1";
         
         // Start the connection attempt.
//         ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
         ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, 8080));
 
         // Wait until the connection attempt succeeds or fails.
         Channel channel = future.awaitUninterruptibly().getChannel();
         if (!future.isSuccess()) {
             future.getCause().printStackTrace();
             bootstrap.releaseExternalResources();
             return;
         }
 
         // Read commands from the stdin.
         ChannelFuture lastWriteFuture = null;
         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
         for (;;) {
             String line = in.readLine();
             if (line == null) {
                 break;
             }
 
             // Sends the received line to the server.
             lastWriteFuture = channel.write(line + "\r\n");
 
             // If user typed the 'bye' command, wait until the server closes
             // the connection.
             if (line.toLowerCase().equals("bye")) {
                 channel.getCloseFuture().awaitUninterruptibly();
                 break;
             }
         }
 
         // Wait until all messages are flushed before closing the channel.
         if (lastWriteFuture != null) {
             lastWriteFuture.awaitUninterruptibly();
         }
 
         // Close the connection.  Make sure the close operation ends because
         // all I/O operations are asynchronous in Netty.
         channel.close().awaitUninterruptibly();
 
         // Shut down all thread pools to exit.
         bootstrap.releaseExternalResources();
     }
 }
